/**
 * 认证相关的自定义Hook
 *
 * 这个Hook封装了认证相关的逻辑，提供了简洁的API给组件使用
 * 演示了如何将状态管理和业务逻辑封装到自定义Hook中
 */
import { useEffect } from 'react';
import { useAuthStore } from '../store/authStore';
import { LoginRequest } from '../types';

export const useAuth = () => {
  const {
    user,
    isAuthenticated,
    isLoading,
    error,
    login,
    logout,
    getCurrentUser,
    clearError,
    initializeAuth,
    isAdmin: storeIsAdmin,
  } = useAuthStore();

  /**
   * 组件挂载时初始化认证状态
   */
  useEffect(() => {
    initializeAuth();
  }, [initializeAuth]);

  /**
   * 登录函数
   * @param credentials 登录凭据
   */
  const handleLogin = async (credentials: LoginRequest) => {
    try {
      await login(credentials);
      return { success: true };
    } catch (error: any) {
      return {
        success: false,
        error: error.response?.data?.detail || '登录失败'
      };
    }
  };

  /**
   * 登出函数
   */
  const handleLogout = () => {
    logout();
  };

  /**
   * 刷新用户信息
   */
  const refreshUser = async () => {
    if (isAuthenticated) {
      await getCurrentUser();
    }
  };

  /**
   * 检查用户是否有特定权限
   * @param requiredRole 需要的角色
   * @returns 是否有权限
   */
  const hasRole = (requiredRole: string): boolean => {
    return user?.role === requiredRole;
  };

  /**
   * 检查用户是否为管理员
   * @returns 是否为管理员
   */
  const isAdmin = (): boolean => {
    return storeIsAdmin();
  };

  return {
    // 状态
    user,
    isAuthenticated,
    isLoading,
    error,

    // 方法
    login: handleLogin,
    logout: handleLogout,
    refreshUser,
    clearError,

    // 权限检查
    hasRole,
    isAdmin,
  };
};